Allow falling back to another icon theme before hicolor. (#325546, Rodney
authorMatthias Clasen <mclasen@redhat.com>
Wed, 11 Jan 2006 06:20:17 +0000 (06:20 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Wed, 11 Jan 2006 06:20:17 +0000 (06:20 +0000)
2006-01-11  Matthias Clasen  <mclasen@redhat.com>

Allow falling back to another icon theme before
hicolor.   (#325546, Rodney Dawes)

* gtk/gtksettings.c: Add a gtk-fallback-icon-theme setting.

* gdk/x11/gdkevents-x11.c: Map it to the XSetting Net/FallbackIconTheme.

* gtk/gtkicontheme.c: Consult the fallback icon theme before
looking in hicolor.

ChangeLog
ChangeLog.pre-2-10
gdk/x11/gdkevents-x11.c
gtk/gtkicontheme.c
gtk/gtksettings.c

index 89b8363fa2ba9f8f62ec9978429a9129023b2ed7..f85dbfc67327428e1273761d722e06ca90559dbf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2006-01-11  Matthias Clasen  <mclasen@redhat.com>
+
+       Allow falling back to another icon theme before 
+       hicolor.   (#325546, Rodney Dawes)
+       
+       * gtk/gtksettings.c: Add a gtk-fallback-icon-theme setting.
+
+       * gdk/x11/gdkevents-x11.c: Map it to the XSetting Net/FallbackIconTheme.
+       
+       * gtk/gtkicontheme.c: Consult the fallback icon theme before
+       looking in hicolor. 
+
 2006-01-10  Matthias Clasen  <mclasen@redhat.com>
 
        * tests/testgtk.c: Add an expander example.
index 89b8363fa2ba9f8f62ec9978429a9129023b2ed7..f85dbfc67327428e1273761d722e06ca90559dbf 100644 (file)
@@ -1,3 +1,15 @@
+2006-01-11  Matthias Clasen  <mclasen@redhat.com>
+
+       Allow falling back to another icon theme before 
+       hicolor.   (#325546, Rodney Dawes)
+       
+       * gtk/gtksettings.c: Add a gtk-fallback-icon-theme setting.
+
+       * gdk/x11/gdkevents-x11.c: Map it to the XSetting Net/FallbackIconTheme.
+       
+       * gtk/gtkicontheme.c: Consult the fallback icon theme before
+       looking in hicolor. 
+
 2006-01-10  Matthias Clasen  <mclasen@redhat.com>
 
        * tests/testgtk.c: Add an expander example.
index 41a257bf0adeb6d54c09829b910de82d4cd360b2..d5fd2d9cab988505cd0e967a32804583b439351f 100644 (file)
@@ -2802,6 +2802,7 @@ static const char settings_names[] =
   "Net/CursorBlinkTime\0"     "gtk-cursor-blink-time\0"
   "Net/ThemeName\0"           "gtk-theme-name\0"
   "Net/IconThemeName\0"       "gtk-icon-theme-name\0"
+  "Net/FallbackIconTheme\0"   "gtk-fallback-icon-theme\0"
   "Gtk/CanChangeAccels\0"     "gtk-can-change-accels\0"
   "Gtk/ColorPalette\0"        "gtk-color-palette\0"
   "Gtk/FontName\0"            "gtk-font-name\0"
index 885df5381a9fbe3380faeb725f847ce723eddd3f..869cc2c70147f47204017afbec0cbd769ea504ff 100644 (file)
@@ -72,6 +72,7 @@ struct _GtkIconThemePrivate
   guint pixbuf_supports_svg : 1;
   
   char *current_theme;
+  char *fallback_theme;
   char **search_path;
   int search_path_len;
 
@@ -412,11 +413,15 @@ update_current_theme (GtkIconTheme *icon_theme)
   if (!priv->custom_theme)
     {
       gchar *theme = NULL;
+      gchar *fallback_theme = NULL;
+      gboolean changed = FALSE;
 
       if (priv->screen)
        {
          GtkSettings *settings = gtk_settings_get_for_screen (priv->screen);
-         g_object_get (settings, "gtk-icon-theme-name", &theme, NULL);
+         g_object_get (settings, 
+                       "gtk-icon-theme-name", &theme, 
+                       "gtk-fallback-icon-theme", &fallback_theme, NULL);
        }
 
       if (!theme)
@@ -427,10 +432,26 @@ update_current_theme (GtkIconTheme *icon_theme)
          g_free (priv->current_theme);
          priv->current_theme = theme;
 
-         do_theme_change (icon_theme);
+         changed = TRUE;
        }
       else
        g_free (theme);
+
+      if ((priv->fallback_theme && !fallback_theme) ||
+         (!priv->fallback_theme && fallback_theme) ||
+         (priv->fallback_theme && fallback_theme &&
+          strcmp (priv->fallback_theme, fallback_theme) != 0))
+       {
+         g_free (priv->fallback_theme);
+         priv->fallback_theme = fallback_theme;
+
+         changed = TRUE;
+       }
+      else
+       g_free (fallback_theme);
+
+      if (changed)
+       do_theme_change (icon_theme);
     }
 }
 
@@ -504,6 +525,8 @@ gtk_icon_theme_set_screen (GtkIconTheme *icon_theme,
                        G_CALLBACK (display_closed), icon_theme);
       g_signal_connect (settings, "notify::gtk-icon-theme-name",
                        G_CALLBACK (theme_changed), icon_theme);
+      g_signal_connect (settings, "notify::gtk-fallback-icon-theme-name",
+                       G_CALLBACK (theme_changed), icon_theme);
     }
 
   update_current_theme (icon_theme);
@@ -1019,8 +1042,10 @@ load_themes (GtkIconTheme *icon_theme)
   priv->all_icons = g_hash_table_new (g_str_hash, g_str_equal);
   
   insert_theme (icon_theme, priv->current_theme);
-  
-  /* Always look in the "default" icon theme */
+
+  /* Always look in the "default" icon theme, and in a fallback theme */
+  if (priv->fallback_theme)
+    insert_theme (icon_theme, priv->fallback_theme);
   insert_theme (icon_theme, DEFAULT_THEME_NAME);
   priv->themes = g_list_reverse (priv->themes);
 
index a0a10ef75ae32e2667483216dd595829fcfcc05d..9f0c837f7d4a62b5094e56e14d99dcf8c375660e 100644 (file)
@@ -66,6 +66,7 @@ enum {
   PROP_SPLIT_CURSOR,
   PROP_THEME_NAME,
   PROP_ICON_THEME_NAME,
+  PROP_FALLBACK_ICON_THEME,
   PROP_KEY_THEME_NAME,
   PROP_MENU_BAR_ACCEL,
   PROP_DND_DRAG_THRESHOLD,
@@ -259,6 +260,7 @@ gtk_settings_class_init (GtkSettingsClass *class)
                                                                  GTK_PARAM_READWRITE),
                                              NULL);
   g_assert (result == PROP_THEME_NAME);
+
   result = settings_install_property_parser (class,
                                              g_param_spec_string ("gtk-icon-theme-name",
                                                                  P_("Icon Theme Name"),
@@ -267,6 +269,15 @@ gtk_settings_class_init (GtkSettingsClass *class)
                                                                  GTK_PARAM_READWRITE),
                                              NULL);
   g_assert (result == PROP_ICON_THEME_NAME);
+
+  result = settings_install_property_parser (class,
+                                             g_param_spec_string ("gtk-fallback-icon-theme",
+                                                                 P_("Fallback Icon Theme Name"),
+                                                                 P_("Name of a icon theme to fall back to"),
+                                                                 NULL,
+                                                                 GTK_PARAM_READWRITE),
+                                             NULL);
+  g_assert (result == PROP_FALLBACK_ICON_THEME);
   
   result = settings_install_property_parser (class,
                                              g_param_spec_string ("gtk-key-theme-name",